package abrindoojogo.exemplos.thread;

public class Contador
{
    static public double NANOS_EM_UM_SEGUNDO = 1e9;
    protected long pulsosPorSegundo;
    protected long framesPorSegundo;
    protected long nanoTimeAnterior;
    protected long pulsosContados;
    protected long framesContados;

    public void inicia()
    {
	nanoTimeAnterior = System.nanoTime();
	pulsosContados = 0;
	framesContados = 0;
	pulsosPorSegundo = 0;
	framesPorSegundo = 0;
    }

    public void contaPulso()
    {
	pulsosContados++;
	verifica();
    }

    public void contaFrame()
    {
	framesContados++;
	verifica();
    }

    protected void verifica()
    {
	if (System.nanoTime() - nanoTimeAnterior > NANOS_EM_UM_SEGUNDO)
	{
	    pulsosPorSegundo = pulsosContados;
	    framesPorSegundo = framesContados;
	    pulsosContados = 0;
	    framesContados = 0;
	    nanoTimeAnterior = System.nanoTime();
	}
    }

    public void sleep(long miliSecondsToSleep)
    {
	try
	{
	    Thread.sleep(miliSecondsToSleep);
	} catch (Exception e)
	{
	}
    }

    public long getPulsosPorSegundo()
    {
	return pulsosPorSegundo;
    }

    public long getFramesPorSegundo()
    {
	return framesPorSegundo;
    }
}
